package com.zjw.utils;


import org.springframework.beans.BeanUtils;

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

public class BeanCopyUtils {

    /**
     * 工具类 私有化构造
     */
    private BeanCopyUtils(){

    }

    /**
     * 传入一个源列表，和目标VO字节码；返回目标类型的列表
     *
     * @param source 源
     * @param target 目标
     * @return {@link List}<{@link V}>
     */
    public static <V> List<V> copyList(List source, Class<V> target){
        List<V> res = new ArrayList<>();
        source.stream().forEach((o)->{
            res.add(BeanCopyUtils.copy(o, target));
        });
        return res;
    }


    /**
     * 传入一个源对象和目标对象的字节码对象，返回目标对象
     * @param source 源对象
     * @param target 目标对象字节码对象
     * @return 目标对象
     */
    public static <T> T copy(Object source, Class<T> target){
        if (Objects.isNull(source))
            return null;

        try {
            T t = target.newInstance();
            BeanUtils.copyProperties(source, t);
            return t;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

}
